package projetomsn.Client.UI;

import java.util.ArrayList;
import java.util.StringTokenizer;

/**
 * Classe para tratar os emoticons
 * @author HUMBERTO RAMOS
 */
public class Emoticon {

    /**
     * Nome do emoticon "evilgrin"
     */
    public static final String EVILGRIN = "emotion_evilgrin.png";
    /**
     * Nome do emoticon "grin"
     */
    public static final String GRIN = "emotion_grin.png";
    /**
     * Nome do emoticon "happy"
     */
    public static final String HAPPY = "emotion_happy.png";
    /**
     * Nome do emoticon "smile"
     */
    public static final String SMILE = "emotion_smile.png";
    /**
     * Nome do emoticon "surprise"
     */
    public static final String SURPRISED = "emotion_surprised.png";
    /**
     * Nome do emoticon "tongue"
     */
    public static final String TONGUE = "emotion_tongue.png";
    /*
     * Nome do emoticon "unhappy"
     */
    public static final String UNHAPPY = "emotion_unhappy.png";
    /**
     * Nome do emoticon "waii"
     */
    public static final String WAII = "emotion_waii.png";
    /**
     * Nome do emoticon "wink"
     */
    public static final String WINK = "emotion_wink.png";
    
    /**
     * Codigo do emoticon "evil grin"
     */
    public static final String EVILGRIN_CODE = " %%%1@@@ ";
    /**
     * Codigo do emoticon "grin"
     */
    public static final String GRIN_CODE = " %%%2@@@ ";
    /**
     * Codigo do emoticon "happy"
     */
    public static final String HAPPY_CODE = " %%%3@@@ ";
    /**
     * Codigo do emoticon "smile"
     */
    public static final String SMILE_CODE = " %%%4@@@ ";
    /**
     * Codigo do emoticon "surprise"
     */
    public static final String SURPRISED_CODE = " %%%5@@@ ";
    /**
     * Codigo do emoticon "tongue"
     */
    public static final String TONGUE_CODE = " %%%6@@@ ";
    /**
     * Codigo do emoticon "unhappy"
     */
    public static final String UNHAPPY_CODE = " %%%7@@@ ";
    /**
     * Codigo do emoticon "waii"
     */
    public static final String WAII_CODE = " %%%8@@@ ";
    /**
     * Codigo do emoticon "wink"
     */
    public static final String WINK_CODE = " %%%9@@@ ";
    
    /**
     * Metodo para adicionar emoticon a mensagem
     * @param message
     * @param emoticonsCode
     * @return 
     */
    public static String addEmoticonsToMessage(String message, ArrayList<String> emoticonsCode) {

        String s;
        
        for (int i = 0; i < message.length(); i++) {
            if (!isEmoticon(emoticonsCode.get(i))) {
                s = "" + message.charAt(i);
                emoticonsCode.set(i, s);
                s = "";
            }
        }

        StringBuilder temp = new StringBuilder("");

        for (int i = 0; i < emoticonsCode.size(); i++) {

            temp.append(emoticonsCode.get(i));
        }

        message = temp.substring(0, temp.length());


        for (int i = 0; i < 150; i++) {
            emoticonsCode.set(i, "");
        }

        return message;
    }

    /**
     * Metodo para adicionar emoticon a mensagem recebida
     * @param message
     * @return 
     */
    public static String addEmoticonsToMessageReceived(String message) {

        ArrayList<String> messageTemp = new ArrayList<String>();
        StringTokenizer stringTokenizer = new StringTokenizer(message);
        for (int i = 0; stringTokenizer.hasMoreTokens(); i++) {
            messageTemp.add(stringTokenizer.nextToken());
        }

        StringBuilder temp = new StringBuilder("");
        for (int i = 0; i < messageTemp.size(); i++) {

            temp.append(getEmoticonsOrWord(" " + messageTemp.get(i) + " "));

        }

        return temp.substring(0, temp.length());

    }

    /**
     * Obtém o código do emoticon dentro do texto
     * @param msg
     * @return 
     */
    private static String getEmoticonsOrWord(String msg) {

        String first = "<img src=\"file:C:/MyMessenger/Images/";
        String last = "\" width=\"32\" height=\"32\"></img>";

        if (msg.equals(Emoticon.EVILGRIN_CODE)) {
            return first + Emoticon.EVILGRIN + last;
        } else if (msg.equals(Emoticon.GRIN_CODE)) {
            return first + Emoticon.GRIN + last;
        } else if (msg.equals(Emoticon.HAPPY_CODE)) {
            return first + Emoticon.HAPPY + last;
        } else if (msg.equals(Emoticon.SMILE_CODE)) {
            return first + Emoticon.SMILE + last;
        } else if (msg.equals(Emoticon.SURPRISED_CODE)) {
            return first + Emoticon.SURPRISED + last;
        } else if (msg.equals(Emoticon.TONGUE_CODE)) {
            return first + Emoticon.TONGUE + last;
        } else if (msg.equals(Emoticon.UNHAPPY_CODE)) {
            return first + Emoticon.UNHAPPY + last;
        } else if (msg.equals(Emoticon.WAII_CODE)) {
            return first + Emoticon.WAII + last;
        } else if (msg.equals(Emoticon.WINK_CODE)) {
            return first + Emoticon.WINK + last;
        }
        return msg;

    }

    /**
     * Verifica se a palavra é um código de emoticon
     * @param msg
     * @return 
     */
    private static boolean isEmoticon(String msg) {
        if (msg.equals(Emoticon.EVILGRIN_CODE)) {
            return true;
        } else if (msg.equals(Emoticon.GRIN_CODE)) {
            return true;
        } else if (msg.equals(Emoticon.HAPPY_CODE)) {
            return true;
        } else if (msg.equals(Emoticon.SMILE_CODE)) {
            return true;
        } else if (msg.equals(Emoticon.SURPRISED_CODE)) {
            return true;
        } else if (msg.equals(Emoticon.TONGUE_CODE)) {
            return true;
        } else if (msg.equals(Emoticon.UNHAPPY_CODE)) {
            return true;
        } else if (msg.equals(Emoticon.WAII_CODE)) {
            return true;
        } else if (msg.equals(Emoticon.WINK_CODE)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * Retorna o código do emoticon
     * @param emoticonName
     * @return 
     */
    public static String getEmoticonCode(String emoticonName) {



        if (emoticonName.equals(Emoticon.EVILGRIN)) {
            return Emoticon.EVILGRIN_CODE;
        } else if (emoticonName.equals(Emoticon.GRIN)) {
            return Emoticon.GRIN_CODE;
        } else if (emoticonName.equals(Emoticon.HAPPY)) {
            return Emoticon.HAPPY_CODE;
        } else if (emoticonName.equals(Emoticon.SMILE)) {
            return Emoticon.SMILE_CODE;
        } else if (emoticonName.equals(Emoticon.SURPRISED)) {
            return Emoticon.SURPRISED_CODE;
        } else if (emoticonName.equals(Emoticon.TONGUE)) {
            return Emoticon.TONGUE_CODE;
        } else if (emoticonName.equals(Emoticon.UNHAPPY)) {
            return Emoticon.UNHAPPY_CODE;
        } else if (emoticonName.equals(Emoticon.WAII)) {
            return Emoticon.WAII_CODE;
        } else {
            return Emoticon.WINK_CODE;
        }


    }
}
